//给定一个仅包含大小写字母和空格 ' ' 的字符串 s，返回其最后一个单词的长度。如果字符串从左向右滚动显示，那么最后一个单词就是最后出现的单词。 
//
// 如果不存在最后一个单词，请返回 0 。 
//
// 说明：一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。 
//
// 
//
// 示例: 
//
// 输入: "Hello World"
//输出: 5
// 
// Related Topics 字符串 
// 👍 238 👎 0

package leetcode.editor.cn;

//Java：最后一个单词的长度
public class P58LengthOfLastWord {

    /**
     *
     * 思路：设置两个指针遍历，根据有没有碰到空格，来知道单词的开始和结束下标
     *      一开始从左到右，O(n),却只击败了5% 的用户，我就很奇怪，后来想了一想，求得是最后一个单词，应该是从右到左进行遍历，这次就没问题了
     *
     * 执行用时： 0 ms , 在所有 Java 提交中击败了 100.00% 的用户 内存消耗： 37.8 MB , 在所有 Java 提交中击败了 68.96% 的用户
     *
     */
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int lengthOfLastWord(String s) {
            int start = -1;
            int end = -2;
            boolean inUse = false;
            for (int i = s.length() - 1; i >= 0; i--) {
                if (!inUse && s.charAt(i) != ' ') {
                    inUse = true;
                    end = i;
                    continue;
                }
                if (inUse && s.charAt(i) == ' ') {
                    inUse = false;
                    start = i + 1;
                    break;
                }
            }
            if (inUse) {
                start = 0;
            }
            return end - start + 1;
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)

    public static void main(String[] args) {
        Solution solution = new P58LengthOfLastWord().new Solution();
        System.out.println(solution.lengthOfLastWord(""));
        System.out.println(solution.lengthOfLastWord("  "));
        System.out.println(solution.lengthOfLastWord("  abc d  e"));
        System.out.println(solution.lengthOfLastWord("aaaaaaa"));
        System.out.println(solution.lengthOfLastWord("abc  "));
        // TO TEST
    }

}